% Read EXCEL input: share; eps_target; eps_calib; eta_target; eta_calib
data = xlsread('.\input\elastheta.xlsx','5x5','B3:F7');

% Check Engel's aggregation (variable engel = 1 must hold)
% submatrix = fullMatrix(row1:row2, column1:column2);
eta_target = data(1:5, 4:4);
theta = data(1:5, 1:1);
engel = theta'*eta_target;

% Create a diagonal matrix with diagonal terms being the own-price AUES elasticities
eps_target = data(1:5, 2:2);
theta_diag = diag(theta);
aues_diag = diag(inv(theta_diag)*eps_target);
aues = zeros(5,5);

% For each row create random variables no larger than the |diagonal term|
aues(1,2) = (-1+2*rand)*abs(aues_diag(1,1));
aues(1,3) = (-1+2*rand)*abs(aues_diag(1,1));
aues(1,4) = (-1+2*rand)*abs(aues_diag(1,1));
aues(2,3) = (-1+2*rand)*abs(aues_diag(2,2));
aues(2,4) = (-1+2*rand)*abs(aues_diag(2,2));

%aues(1,2) = 0;
%aues(1,3) = 0;
%aues(1,4) = 0;
%aues(2,3) = 0;
%aues(2,4) = 0;

aues(2,1) = aues(1,2);
aues(3,1) = aues(1,3);
aues(4,1) = aues(1,4);
aues(3,2) = aues(2,3);
aues(4,2) = aues(2,4);

aues = aues + aues_diag;

% Solve for aues(1,5), (2,5), (3,5), (4,5), (3,4) by solving B = inv(A)*E

A = [theta(5,1) 0          0          0          0;
     0          theta(5,1) 0          0          0;
     0          0          theta(5,1) 0          theta(4,1);
     0          0          0          theta(5,1) theta(3,1);
     theta(1,1) theta(2,1) theta(3,1) theta(4,1) 0];

C = -aues*theta;

B = inv(A)*C;
aues(1,5) = B(1,1);
aues(2,5) = B(2,1);
aues(3,5) = B(3,1);
aues(4,5) = B(4,1);
aues(3,4) = B(5,1);

aues(5,1) = aues(1,5);
aues(5,2) = aues(2,5);
aues(5,3) = aues(3,5);
aues(5,4) = aues(4,5);
aues(4,3) = aues(3,4);

% Check Cournot aggregation
cournot = aues*theta;

% Check NSD
sub_aues2 = aues(1:2, 1:2);
sub_aues3 = aues(1:3, 1:3);
aub_aues4 = aues(1:4, 1:4);

det2 = det(sub_aues2);
det3 = det(sub_aues3);
det4 = det(sub_aues4);
det5 = det(aues);
Undefined function or variable 'sub_aues4'.

Error in check_nsd_5x5 (line 70)
det4 = det(sub_aues4);